package com.huawei;

import java.util.*;

/**
题目：
 输入一个只包含小写英文字母和数字的字符串，按照不同字符统计个数由多到少输出统计结果，如果统计的个数相同，则按照ASCII码由小到大排序输出。
例子：
 输入：aaddccdc
 输出：cda
 说明：样例里，c和d出现3次，a出现2次，但c的ASCII码比d小，所以先输出c，再输出d，最后输出a.
 分析：
 可不可以用TreeMap<Character,Integer>，然后传入自定义的比较器呢？
 自定义比较器如何设定？
 1.如果次数不一样的，要先按次数从大排到小，即逆排，那么就是o2.getValue() - o1.getValue()
 2.如果次数一样的，要按ASCII，从小排到大，即正排，那么就是o1.getKey()-o2.getKey()
 but,实际比较器要相反才能得到正确答案，跟我想的不一样



 **/
public class HJ102 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String input = scanner.nextLine();
        char[] arr = input.toCharArray();
        TreeMap<Character, Integer> map = new TreeMap(
//                //为啥转为entry就会报错，我不太理解,TreeMap是默认对key进行排序，没法对value进行比较
//                    new Comparator<SortedMap.Entry<Character, Integer>>() {
//                //不用担心getValue()为null，根据题目不可能发生
//                @Override
//                public int compare(SortedMap.Entry<Character, Integer> o1, SortedMap.Entry<Character, Integer> o2) {
//                    if(o1.getValue() != o2.getValue()){
//                        return o2.getValue() - o1.getValue();
//                    }else{
//                        return o1.getKey() - o2.getKey();
//                    }
//                }
//            }
        );


        for (Character s : arr) {
            map.put(s,map.getOrDefault(s,0)+1);
        }

        ArrayList<Map.Entry<Character,Integer>> list = new ArrayList(map.entrySet());
        Collections.sort(list, new Comparator<Map.Entry<Character,Integer>>() {
            @Override
            public int compare(Map.Entry<Character, Integer> o1, Map.Entry<Character, Integer> o2) {
                if(o1.getValue() != o2.getValue()){
//                    return  o2.getValue()-o1.getValue();
                    //倒排（从大排小）
                    return o2.getValue().compareTo(o1.getValue());
                }
                else{
                    return o1.getKey()- o2.getKey();
                }

            }
        });
        for (Map.Entry<Character,Integer> o : list) {
            System.out.print(o.getKey());
        }


    }
}
